/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package resources.reports;
import java.io.File;
import java.io.FileInputStream;
import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.ServiceUI;
import javax.print.SimpleDoc;
import javax.print.attribute.HashDocAttributeSet;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
/**
 *
 * @author isaias
 */
public class PrintPDFManager {
      public static void printPDF(File f, boolean showDialog) throws Exception {

        PrintService[] printerServices =
                PrintServiceLookup.lookupPrintServices(
                DocFlavor.INPUT_STREAM.PDF, null);

        System.out.println("Impressoras com suporte: " + printerServices.length);

        // Localiza a impressora padrão
        PrintService printer = PrintServiceLookup.lookupDefaultPrintService();
        if (printer == null) {
            throw new Exception("Não existe nenhuma impressora padrão definida");
        } else {
            System.out.println("Impressora: " + printer.getName());
        }

        System.out.println("Imprimindo arquivo txt");
        // Definição de atributos do conteúdo a ser impresso:
        DocFlavor docFlavor = DocFlavor.INPUT_STREAM.PDF;

        // Atributos de impressão do documento
        HashDocAttributeSet attributes = new HashDocAttributeSet();

        // InputStream apontando para o conteúdo a ser impresso
        FileInputStream fi = new FileInputStream(f);

        // Cria um Doc para impressão a partir do arquivo exemplo.txt
        Doc textDocument = new SimpleDoc(fi, docFlavor, attributes);

        // Configura o conjunto de parametros para a impressora
        PrintRequestAttributeSet printerAttributes = new HashPrintRequestAttributeSet();


        if (showDialog) {
            // exibe um dialogo de configuracoes de impressao
            PrintService service = ServiceUI.printDialog(null, 320, 240,
                    printerServices, printer, docFlavor, printerAttributes);
            if (service != null) {
                DocPrintJob printJob = service.createPrintJob();
                printJob.print(textDocument, printerAttributes);
            }

        } else {
            // Cria um job de impressão
            DocPrintJob printJob = printer.createPrintJob();

            // Adiciona uma propriedade de impressão: imprimir 2 cópias
            //  printerAttributes.add(new Copies(1));

            // Imprime o documento sem exibir uma tela de dialogo
            printJob.print(textDocument, printerAttributes);
        }

    }
}
